package kyssion.leetcode.num51_100;

public class code65_有效数字 {
    public static void main(String[] args) {
    }

    public boolean isNumber1(String str) {
        if (str == null || str.length() == 0) {
            return false;
        }
        str = str.trim();//必须将前后的空格去掉，此外中间不得出现空格
        boolean hasDot = false;
        boolean hasE = false;
        boolean hasDigit = false;
        for (int i = 0, len = str.length(); i < len; ++i) {
            char c = str.charAt(i);
            if ('0' <= c && c <= '9') {
                hasDigit = true;
            } else if (c == '.') {
                if (hasE || hasDot) {// e后面不能出现 dot,dot前面可以没有数字
                    return false;
                }
                hasDot = true;
            } else if (c == 'e') {
                if (hasE || !hasDigit) {// e 前面必须有数字
                    return false;
                }
                hasDigit = false;//e 后面也必须出现数字，故将其置为 false
                hasE = true;
            } else if (c == '-' || c == '+') {
                if (i != 0 && str.charAt(i - 1) != 'e') {//数字中间不能出现+-符号，除非在e后
                    return false;
                }
            } else {
                return false;
            }
        }
        //判断是否出现了数字（若出现了e，则判断e后是否存在数字）
        return hasDigit;
    }

    public boolean isNumber2(String s) {
        String end = s.substring(s.length() - 1);
        // System.out.println(end);
        if (end.matches("[fFdD]")) {
            return false;
        }
        try {
            Float f = Float.parseFloat(s);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
